TerraformでS3に配置するファイルの更新は、etagでトリガーする必要がある
2024.02.07
こんにちは、ゲームソリューション部のsoraです。
今回は、TerraformでS3に配置するファイルの更新は、etagでトリガーする必要があることについて書いていきます。
事象
TerraformでS3バケットにファイルを配置した後、そのファイルを更新してapply使用とすると、以下のように変更が検知されませんでした。
No changes. Your infrastructure matches the configuration. Terraform has compared your real infrastructure against your configuration and found no differences, so no changes are needed.
Terraformのコードは以下です。
S3バケットを作成して、そこにCSVファイルを配置しているだけです。
terraform { required_providers { aws = { source = "hashicorp/aws" version = "~> 5.35.0" } } backend local { path = "tmp.tfstate" } } provider aws { region = "ap-northeast-1" } resource aws_s3_bucket csv_bucket { bucket = "sora-test-bucket-202402" } resource aws_s3_object csv { bucket = aws_s3_bucket.csv_bucket.id key = "test.csv" source = "test.csv" }
原因
Terraformの公式ドキュメントを読んでみると、S3へオブジェクトを配置するときに、ファイルが更新されたことをトリガーするetagが抜けていることが原因でした。
resource aws_s3_object csv { bucket = aws_s3_bucket.csv_bucket.id key = "test.csv" source = "test.csv" # sourceで指定している場所を指定 etag = filemd5("test.csv") }
上記修正をして、再度CSVファイルを更新して実行してみると、無事差分が検知されました。
~ update in-place Terraform will perform the following actions: # aws_s3_object.csv will be updated in-place ~ resource "aws_s3_object" "csv" { ~ etag = "53b54c5f36e6cbf551753cc4885f31f1" -> "e0a4db53b7088d10680779c1a6480085" id = "test.csv" tags = {} + version_id = (known after apply) # (10 unchanged attributes hidden) } Plan: 0 to add, 1 to change, 0 to destroy.
最後に
今回は、TerraformでS3に配置するファイルの更新は、etagでトリガーする必要があることを記事にしました。
どなたかの参考になると幸いです。